PLSQL编程
撰写时间: 2020-08-06 总共: 1894 字 转载请注明: BY-SA 4.0(除特别声明或转载文章外)
PLSQL
ORACLE 数据库中包含一种过程化语言,称为 PL/SQL(Procedural Language/SQL)。
PL/SQL 是 ORACLE 的专用语言,它是对 SQL 语言的扩展,它允许在其内部嵌套普通的 SQL 语句。
基本结构
[DECLARE]
--声明部分,可选
BEGIN
--执行部分,必选
[EXCEPTION]
--异常处理部分,可选
END
变量
避免使用Oracle等内置使用的关键字。
可以使用SYSDBA进行登录 PLSQL进行查询关键字
select * from v$reserved_words order by keyword asc;
数据类型
PLSQL支持所有的SQL数据类型
-- 基本类型
number (decimal,float,integer,等)
char
varchar2
boolean
date
timestamp
--... 等等
-- 复合类型
%type -- 引用变量和数据库表列数据类型一致
%rowtype -- 表的一行记录类型
变量声明
普通变量、常量
DECLARE
-- 变量的名称 变量的类型 :=[赋值运算符] 值; 称为声明变量并初始化;
v_num1 number :=200;
v_num2 number := 0;
-- 常量定义
PI constant number := 3.1415926;
v_result number;
BEGIN
v_result := v_num1 / v_num2;
-- 以下你就认为是java中的 system.out.println();
DBMS_OUTPUT.put_line('结果为:' || v_result);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line('程序有异常!');
END;
引用型变量
-- 与ORACLE中表联系起来 查询Student的姓名信息打印到控制台
DECLARE
-- 表.列%type; 指定表中某个列的类型长度定义变量
v_name student.name%type;
BEGIN
-- INTO 用于 SELECT 查询语句中,表示把查询的列数据赋值给相应的变量
SELECT name INTO v_name FROM student WHERE sid = 1;
-- || 用于拼接字符
DBMS_OUTPUT.put_line('Name:'||v_name);
END;
记录型变量
DECLARE
-- 表中的一行作为变量的类型
v_student_row student%rowtype;
BEGIN
SELECT * INTO v_student_row FROM student WHERE sid = 1;
DBMS_OUTPUT.put_line(v_student_row.name||','||v_student_row.sid);
END;
控制分支循环
IF THEN ELSEIF ELSE
-- 判断语句
DECLARE
v_age number:=&age;
BEGIN
IF v_age < 12 THEN
DBMS_OUTPUT.put_line('A');
ELSIF v_age < 30 THEN
DBMS_OUTPUT.put_line('B');
ELSIF v_age < 50 THEN
DBMS_OUTPUT.put_line('C');
ELSIF v_age < 100 THEN
DBMS_OUTPUT.put_line('D');
ELSE
DBMS_OUTPUT.put_line('F!');
END IF;
END;
循环
包括 for、loop、while 3种
-- 数数,从1数到100,输出到控制台 FOR 变量名称 IN 范围 LOOP 循环体 END LOOP
DECLARE
v_num number :=#
BEGIN
FOR i IN REVERSE 1..v_num LOOP
DBMS_OUTPUT.put_line(i);
END LOOP;
END;
-- LOOP 循环体 END LOOP : EXIT WHEN条件
DECLARE
v_num number :=#
v_index number := 1;
BEGIN
LOOP
-- 循环退出的语句
EXIT WHEN v_index > v_num;
DBMS_OUTPUT.put_line(v_index);
v_index := v_index + 1;
END LOOP;
END;
-- WHILE 条件 LOOP 循环体 END LOOP;
DECLARE
v_num number :=#
v_index number := 1;
BEGIN
WHILE v_index <= v_num LOOP
DBMS_OUTPUT.put_line(v_index);
v_index := v_index + 1;
END LOOP;
END;